package org.gwc.ioc_03;

import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class SoldierController {

    /**
     * @Autowired：自动装配注解(DI):1、ioc容器中查找符合类型的组件对象，2、设置给当前属性
     * @Autowired(required = true) // boolean required() default true; 必须有对应类型的组件
     *                             // required = false 佛系装配 可以没有对应组件，但后期使用该对象时会报错，不推荐
     *
     * 当SoldierService类型有多个实例对象时，会报错不知道选取那个对象
     * 解决方法: 1、成员属性名指定@Autowired 多个组件的时候，默认会根据成员属性名查找
     *              @Autowired
     *              private SoldierService newSoldierServiceImpl;
     *          2、@Qualifier(value = "newSoldierServiceImpl"),使用注解指定获取bean的id,不能单独使用必须配合autowired
     *          3、@Autowired+@Qualifier(value = "newSoldierServiceImpl") => @Resource(name = "soldierServiceImpl")
     *              需要专门导入依赖 jakarta.annotation
     */
    @Resource(name = "soldierServiceImpl")
//    @Autowired
//    @Qualifier(value = "newSoldierServiceImpl")
    private SoldierService soldierService;

    public void show(){
        soldierService.show();
    }
}
